Web 系统有哪些安全隐患
Web系统安全隐患包括:
完全信赖用户提交内容
开发人员决不能相信一个来自外部的数据。不管它来自用户提交表单,文件系统的文件或者环境变量,任何数据都不能简单的想当然的采用。所以用户输入必须进行验证并将之格式化以保证安全。
在web目录中存放敏感数据
任何和所有的敏感数据都应该存放在独立于需要使用数据的程序的文件中,并保存在一个不能通过浏览器访问的目录下。当需要使用敏感数据时,再通过include 或 require语句来包含到适当的PHP程序中。
Web目录禁止存放任何数据文件,例如代码/运算结果数据/文档等以方便下载。
后门和调试隐患
开发人员常常建立一些后门并依靠调试来排除应用程序的故障。在开发过程中这样做可以,但这些安全漏洞经常被留在一些放在Internet上的最终应用中。一些常见的后门使用户不用口令就可以登录或者访问允许直接进行应用配置的特殊URL。
越权漏洞
权限验证机制必须保证在每一个需要身份验证的程序文件中生效,即使是难以猜测的位置和名字,并且对用户级别同样进行严格验证,确保用户不可以非验证状态或低权限状态访问到不属于自己的资源信息。
代码同步安全
开发人员经常有直接从SVN代码库拷贝代码直接上线的习惯,而且多数此类操作都是在UNIX系统下完成,SVN代码库下包含.svn目录,UNIX是一个隐藏性质的目录,开发人员很容易忽略其存在性,该目录包含了关于工作拷贝目录的管理数据,会导致泄露源码、项目结构等敏感信息。
Svn同步过程中可以使用代码语法检测功能进行第一次代码审计,具体实现请参考svn hook的pre-commit。
测试环境保护
测试环境安全与线上安全同样重要,不要为了测试便利而忽略测试机的安全性,防止黑客由内到外的安全攻击事件。
检测机制层次隐患
所有的检测机制必需放在服务端进行,不允许节省线上负载而采取本地js验证。因为攻击者可以重新构造表单请求,删除检测js代码,从而绕过验证。
数据来源安全
我们程序员写出的程序多数都无法辨别请求是用户自行发起的还是被偷偷恶意发起的,所以我们的程序需要对来源进行验证,可以使用referer进行判断,或者在提交的变量组中加入token验证机制,使表单无法预测。